const express = require('express');
const router = express.Router();
const tagService = require('../services/TagService');

// 获取所有标签
router.get('/', async (req, res) => {
  try {
    const { page = 1, limit = 50, query = '' } = req.query;
    const result = await tagService.getTags({
      page,
      limit,
      keyword: query
    });
    
    // 如果没有分页参数，返回简单的标签数组
    if (!req.query.page) {
      res.json(result.tags || []);
    } else {
      res.json(result);
    }
  } catch (error) {
    console.error('获取标签列表失败:', error);
    res.status(500).json({ error: error.message || '获取标签列表失败' });
  }
});

// 创建标签
router.post('/', async (req, res) => {
  try {
    const tagData = req.body;
    const result = await tagService.createTag(tagData);
    res.status(201).json(result);
  } catch (error) {
    console.error('创建标签失败:', error);
    res.status(500).json({ error: error.message || '创建标签失败' });
  }
});

// 更新标签
router.put('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const tagData = req.body;
    const result = await tagService.updateTag(id, tagData);
    res.json(result);
  } catch (error) {
    console.error('更新标签失败:', error);
    res.status(500).json({ error: error.message || '更新标签失败' });
  }
});

// 删除标签
router.delete('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    await tagService.deleteTag(id);
    res.json({ success: true, message: '删除成功' });
  } catch (error) {
    console.error('删除标签失败:', error);
    res.status(500).json({ error: error.message || '删除标签失败' });
  }
});

// 获取标签详情
router.get('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const tag = await tagService.getTagDetail(id);
    res.json(tag);
  } catch (error) {
    console.error('获取标签详情失败:', error);
    if (error.message === '标签不存在') {
      res.status(404).json({ error: '标签不存在' });
    } else {
      res.status(500).json({ error: error.message || '获取标签详情失败' });
    }
  }
});

// 获取标签下的包
router.get('/:tagId/packages', async (req, res) => {
  try {
    const { tagId } = req.params;
    const { page = 1, limit = 20 } = req.query;
    const result = await tagService.getPackagesByTag(tagId, {
      page,
      limit
    });
    res.json(result);
  } catch (error) {
    console.error('获取标签下的包失败:', error);
    if (error.message === '标签不存在') {
      res.status(404).json({ error: '标签不存在' });
    } else {
      res.status(500).json({ error: error.message || '获取标签下的包失败' });
    }
  }
});

module.exports = router;